类型提示 - type hints
类型提示 - type hints
官方文档:PEP 484 – Type Hints | peps.python.org
基本语法:Function Annotations、Type Definition Syntax
Pycharm 的相关支持:Type hinting in PyCharm | PyCharm Documentation
python 一直以来都不是开发大工程的主流语言,不管是前端还是后端,主要的原因其实就是以下几点:
-
python 是解释性语言,运行效率比 java 等语言慢;
-
python 是动态语言,在后期维护的成本非常高,很重要的一点就是没有进行类型检查,当然还包括新建变量不需要声明以及指定类型等等。
但是,在python3.5 之后,就新增了对函数参数和返回值的类型指定和检查,以及在新建变量时也可以指定类型。
即便如此,Python 仍将是一种动态类型语言,作者不希望强制使用类型提示,即使是按照约定。
如何指定类型?
-
在 Python2 中,使用代码注释,用的不多了,这里就不详细了解了
类型注解(其实英文里叫方法注解 Function annotations)语法从 Python3 开始支持
Pycharm 中为变量添加包含类型信息的代码注释的方式:Type hinting in PyCharm | PyCharm Documentation
-
在 Python3 中,类型注解
变量:类型
,类型就是用 class 关键字声明的类型,除了特定的类型,还有 Union 类型用于处理多类型声明、Any 类型处理任意类型,等等类型注解(其实英文里叫方法注解 Function annotations)语法从 Python3 开始支持
在 Python 中,
变量:类型
叫annotations
,也就是注解,这些@property
,@staticmethod
and@classmethod
.叫decorators
也就是装饰器,这个 Java 不一样,注意区分。Pycharm 中为变量添加类型注解的方式:Type hinting in PyCharm | PyCharm Documentation
具体实践,请参考《类型提示 - 类型注解.md》
-
通过 stubs 文件来实现类型提示
Pycharm 相关文档:Stubs | PyCharm Documentation
您可以使用 Python stubs 文件使用 Python 3 语法指定类型提示。无论解释器中使用的是哪个 Python 版本,这些提示都将在 Python 文件中可用。也就是说兼容 Python2 和 Python3
具体实践,参考《类型提示 -Stubs.md》
注意,Python2.x 与 3.x 版本并不兼容,Python2.x 与 3.x 版本区别 | 菜鸟教程
有一些类型检查器(Type checker)可以用来检查变量类型是否符合我们设置的类型信息:
PyCharm 用的是自己实现的类型检查器,如果你想的话,你也可以把 Pycharm 的类型检查器换成以上任意一种
实践
总的来说,如果本身就偏向于编写带有类型信息的 python 代码,那么类型注解是你的首选,而不是 stubs 文件,stubs 文件只能作为一种之前没写类型信息,后面想补上的补救措施。
在写一些篇幅较短的脚本的时候,为了方便和快捷,我们可以省略变量类型,但是在编写大型项目的时候,一定要把类型注解给加上,否则代码将基本上不可读。
跟 Java 的比较
Java 本身是一种静态语言,声明变量和方法的时候必须有类型,而 Python 是一种动态语言,在运行时,其会自动推断变量的类型,所以在代码编辑阶段,变量的类型提示在语法中是一种可选项,是一种可选项,可写可不写,写了,解释器可以使用其进行类型检查,减少代码编写过程中的错误,不写,也无伤大雅,不影响运行。甚至就算在类型注解中声明了类型,传入别的类型的数据,也依然不会直接报错,而是警告,因为最终会不会报错,还得看运行时的情况,所以对于动态语言来说,变量类型,实在是很松散的一种约束,不像 Java 这种静态语言,类型是一种严格的约束。